package com.rem.se.reflect;

import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.function.Function;

/**
 * 哪些类型可以有Class对象
 * <p>
 * class:外部类、成员（成员内部类、静态内部类），局部内部类，匿名内部类。
 * interface：接口
 * []：数组
 * enum：枚举
 * annotation：注解
 * primitive type：基本数据类型
 * void
 *
 * @author Rem
 * @date 2021-03-14
 */

public class Demo03 {

    public static void main(String[] args) {


        //类
        Class<String> c1 = String.class;

        //接口
        Class c2 = Function.class;

        //一维数组
        Class c3 = int[].class;

        //二维数组
        Class c4 = Double[][].class;

        //枚举
        RetentionPolicy c5 = RetentionPolicy.CLASS;

        //注解
        Class c6 = Target.class;

        //void
        Class c7 = void.class;

        //Class
        Class c8 = Class.class;

        //基本数据类型
        Class c9 = int.class;

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
        System.out.println(c7);
        System.out.println(c8);
        System.out.println(c9);


        int[] t1 = new int[10];
        int[] t2 = new int[100];

        //true  一个类只有一个Class对象，和根据这个模板创建了多少对象没有关系
        System.err.println(t1.getClass().hashCode() == t2.getClass().hashCode());
    }
}
